package com.tistory.admin.adminmgr.auth.model;

import org.apache.log4j.Logger;
import org.springframework.util.StringUtils;

public class MemberConstants {

	private final static Logger log = Logger.getLogger(MemberConstants.class);

	/**
	 * 멤버 타입 코드<p>
	 * 일반회원 : "CP" <br>
	 * 운영자 : "AD"<br>
	 * 시스템운영자 : "SU"<br>
	 */
	public static final String MEMBER_TYPE_NORMAL = "CP";
	public static final String MEMBER_TYPE_ADMIN = "AD";
	public static final String MEMBER_TYPE_SYSTEM_ADMIN = "SU";

	/**
	 * 로그인 체크/권한 체크
	 * @param memberInfo 로그인/권한 체크할 회원정보
	 * @param type 체크할 권한 정보
	 * @throws ContentException
	 */
	public static void checkMember(LoginUserInfo memberInfo, String type) throws ContentException {
		// 로그인체크
		if(memberInfo == null) {
			throw new ContentException("로그인 해 주세요.");
		}
		// 권한 체크
		if(!memberInfo.getMemberType().equals(type)) { // 체크할 권한이 아니라면
			log.debug("Check Permission = " + type);
			log.debug("Permission Checking Failed. Current Permission = " + memberInfo.getMemberType());

			if(type.equals(MEMBER_TYPE_NORMAL)) {
				throw new ContentException("BP가 아닙니다.");
			}
			else if(type.equals(MEMBER_TYPE_ADMIN)) {
				//throw new ContentException("운영자가 아닙니다.");
			}
			else if(type.equals(MEMBER_TYPE_SYSTEM_ADMIN)) {
				throw new ContentException("시스템 운영자가 아닙니다.");
			}
		}
	}

	/**
	 * 운영자인지 아닌지를 체크한다.
	 * @param memberInfo
	 * @return 운영자면 true, 아니면 false
	 */
	public static boolean isAdmin(LoginUserInfo memberInfo) {

		if(	   StringUtils.startsWithIgnoreCase(MEMBER_TYPE_ADMIN, memberInfo.getMemberType())
			|| StringUtils.startsWithIgnoreCase(MEMBER_TYPE_SYSTEM_ADMIN, memberInfo.getMemberType())
		) {
			return true;
		}
		else
			return false;
	}

	/**
	 * 일반유저(CP/BP)인지 아닌지를 체크한다.
	 * @param memberInfo
	 * @return 일반유저(CP/BP)면 true, 아니면 false
	 */
	public static boolean isNormal(LoginUserInfo memberInfo) {

		if(StringUtils.startsWithIgnoreCase(MEMBER_TYPE_NORMAL, memberInfo.getMemberType())) {
			return true;
		}
		else
			return false;
	}

	public static String YES = "Y";
	public static String NO = "N";
	public static String BLANK = "";


	/** 회원구분코드 */
	public static String MEM_CLS_PRIVATE	= "US000101"; // 개인
	public static String MEM_CLS_BUSINESS	= "US000102"; // 사업자

	/** 유료개발자 회원상태코드 */
	public static String MEM_DEV_STATUS_REG_MOTION 			= "US000801"; // 가입신청
	public static String MEM_DEV_STATUS_REG_FINISH 			= "US000802"; // 가입완료
	public static String MEM_DEV_STATUS_REG_REJECT 			= "US000803"; // 가입거절
	public static String MEM_DEV_STATUS_TURN_MOTION 		= "US000804"; // 전환신청
	public static String MEM_DEV_STATUS_TURN_FINISH 		= "US000805"; // 전환완료
	public static String MEM_DEV_STATUS_TURN_REJECT 		= "US000806"; // 전환거절
	public static String MEM_DEV_STATUS_LEAVE_MOTION 		= "US000807"; // 탈퇴신청
	public static String MEM_DEV_STATUS_LEAVE_FINISH 		= "US000808"; // 탈퇴완료
	public static String MEM_DEV_STATUS_REG_MOTION_AGAIN 	= "US000809"; // 가입재신청

	/** 유료개발자 유형코드 */
	public static String MEM_DEV_TYPE_PRIVATE_PERSON 	= "US000401"; // 개인셀러
	public static String MEM_DEV_TYPE_PRIVATE_BUSINESS 	= "US000402"; // 개인사업자셀러
	public static String MEM_DEV_TYPE_LEGAL_BUSINESS 	= "US000403"; // 법인사업자셀러

	/** 회원상태코드 */
	public static String MEM_STATUS_MOBILE 			= "US000501"; // 정상(모바일)
	public static String MEM_STATUS_EMAIL_WAITING 	= "US000502"; // 가가입(이메일승인대기)
	public static String MEM_STATUS_NORMAL 			= "US000503"; // 정상
	public static String MEM_STATUS_STOP 			= "US000504"; // 일시정지
	public static String MEM_STATUS_LEAVE 			= "US000505"; // 탈퇴

	/** 회원분류코드 */
	public static String MEM_TYPE_MOBILE 			= "US000201"; // 모바일 전용 회원
	public static String MEM_TYPE_NORMAL 			= "US000202"; // 일반사용자 회원
	public static String MEM_TYPE_NORMAL_DEV_NOPAY 	= "US000203"; // 일반무료개발
	public static String MEM_TYPE_NORMAL_DEV_PAY 	= "US000204"; // 일반유료개발
	public static String MEM_TYPE_DEV_NOPAY 		= "US000205"; // 무료개발
	public static String MEM_TYPE_DEV_PAY 			= "US000206"; // 유료개발
	public static String MEM_TYPE_BP 					= "US000207"; /** SMILE BP회원 */
//	public static String MEM_TYPE_BP 					= "US000204"; /** SMILE BP회원 => 개발자회원으로 변경됨 */

	public static String MEM_CAT_CD_SMILEBP 					= "US000207"; /** SMILE BP회원 */

	/** 사업자코드 <p>
	 * MEM_BIZ_CAT_CD_PB = "US000901"; // 개인사업자<br>
	 * MEM_BIZ_CAT_CD_LB = "US000902"; // 법인사업자<br>
	 * MEM_BIZ_CAT_CD_ST = "US000903"; // 간이과세자
	 */
	public static String MEM_BIZ_CAT_CD_PB = "US000901"; // 개인사업자
	public static String MEM_BIZ_CAT_CD_LB = "US000902"; // 법인사업자
	public static String MEM_BIZ_CAT_CD_ST = "US000903"; // 간이과세자

	/** 전환유형코드 */
	public static String TRANS_TYPE_FREE_TO_PRIVATE_PERSON		= "US001501"; // 유료전환 (무료개발자 -> 유료개인개발자)
	public static String TRANS_TYPE_FREE_TO_PRIVATE_BUSINESS	= "US001502"; // 개인사업자가입 (무료개발자 -> 개인사업자)
	public static String TRANS_TYPE_FREE_TO_LEGAL_BUSINESS		= "US001503"; // 법인사업자가입 (무료개발자 -> 법인사업자)
	public static String TRANS_TYPE_CHARGE_TO_PRIVATE_BUSINESS	= "US001504"; // 개인사업자전환 (유료개인개발자 -> 개인사업자)
	public static String TRANS_TYPE_CHARGE_TO_LEGAL_BUSINESS	= "US001505"; // 법인사업자전환 (유료개인개발자 -> 법인사업자)
	public static String TRANS_TYPE_BUSINESS_TO_BUSINESS		= "US001506"; // 사업자간 전환 (개인사업자 -> 법인사업자)

	/** 처리상태코드 */
	public static String PROCCESS_STATUS_MOTION	= "US001601"; // 승인요청
	public static String PROCCESS_STATUS_FINISH	= "US001602"; // 승인완료
	public static String PROCCESS_STATUS_REJECT	= "US001603"; // 승인거절

	/** 등록서류항목코드 */
	public static String DOC_HM_01 = "US001901"; // 사업자 등록증 사본
	public static String DOC_HM_02 = "US001902"; // 법인명의 통장사본
	public static String DOC_HM_03 = "US001903"; // 법인(개인)인감증명서원본
	public static String DOC_HM_04 = "US001904"; // 통신판매업 신고증 사본

	/** 로그인 전의 사용자 세션 */
	public static final String GENERAL_USER_SESSION_KEY = "GENERAL_USER_SESSION";
	/** 로그인 후 실행될 URL */
	public static final String RETURN_URL_KEY = "RETURN_URL";

	/** HTTP 연동 방식 */
	public static final String HTTP_METHOD_GET = "GET";
	public static final String HTTP_METHOD_POST = "POST";

	/** 단말기 제조사 */
	public static final String CODE_PHONE_MAKE_COMP = "PD0040";

	/** 통신사 */
	public static final String TELECOM_SKT = "US001201"; // SKT
	public static final String TELECOM_KFT = "US001202"; // KTF
	public static final String TELECOM_LGT = "US001203"; // LGT

	/**
	 * BP회원상태코드<p>
	 * MEM_BP_STATUS_EMAIL_WAITING 			= "US000801"; // 가가입(이메일인증대기)
	 * MEM_BP_STATUS_APPROVAL_WAITING 	= "US000810"; // 이메일인증완료/운영자승인대기
	 * MEM_BP_STATUS_REAPPROVAL_WAITING	= "US000809"; // 가입재신청
	 * MEM_BP_STATUS_NOT_APPROVED			= "US000803"; // 가입거절
	 * MEM_BP_STATUS_NORMAL 					= "US000802"; // 정상(가입승인완료)<br>
	 * MEM_BP_STATUS_LEAVE 						= "US000808"; // 탈퇴
	 */
	public static final String MEM_BP_STATUS_EMAIL_WAITING 			= "US000801"; // 가가입(이메일인증대기)
	public static final String MEM_BP_STATUS_APPROVAL_WAITING 		= "US000810"; // 이메일인증완료/운영자승인대기
	public static final String MEM_BP_STATUS_REAPPROVAL_WAITING 	= "US000809"; // 가입재신청
	public static final String MEM_BP_STATUS_NOT_APPROVED				= "US000803"; // 가입거절
	public static final String MEM_BP_STATUS_NORMAL 						= "US000802"; // 정상
	public static final String MEM_BP_STATUS_LEAVE 							= "US000808"; // 탈퇴

	/** 기본 정산률 */
	public static final int MEM_BP_SMILE_RATE		= 70;
	public static final int MEM_BP_SKT_RATE		= 100 - MEM_BP_SMILE_RATE;

	// 로그인 경로
	/** 로그인 경로 (PC Manager) */
	public static final String LOGIN_PATH_PCMGR = "PC_MGR";
	/** 로그인 경로 (DEV_POC) */
	public static final String LOGIN_PATH_DEV = "DEV";
	/** 로그인 경로 (BP_POC) */
	public static final String LOGIN_PATH_BP = "BP";

	/** BP회원 추가정보에서 허용되는 파일 타입 */
	public static final String[] VALID_DOC_FILE_TYPE = {"zip", "doc", "xls"};
	public static final String[] VALID_IMG_FILE_TYPE = {"jpg", "gif", "png", "bmp"};
}
